document.addEventListener('DOMContentLoaded', function () {
    const $blogName = document.getElementById('site-name')
    let blogNameWidth = $blogName && $blogName.offsetWidth
    const $menusEle = document.querySelector('#menus .menus_items')
    let menusWidth = $menusEle && $menusEle.offsetWidth
    const $searchEle = document.querySelector('#search-button')
    let searchWidth = $searchEle && $searchEle.offsetWidth

    const adjustMenu = (change = false) => {
        if (change) {
            blogNameWidth = $blogName && $blogName.offsetWidth
            menusWidth = $menusEle && $menusEle.offsetWidth
            searchWidth = $searchEle && $searchEle.offsetWidth
        }
        const $nav = document.getElementById('nav')
        let t
        if (window.innerWidth < 768) t = true
        else t = blogNameWidth + menusWidth + searchWidth > $nav.offsetWidth - 120

        if (t) {
            $nav.classList.add('hide-menu')
        } else {
            $nav.classList.remove('hide-menu')
        }
    }

    // 初始化header
    const initAdjust = () => {
        adjustMenu()
        document.getElementById('nav').classList.add('show')
    }

    // sidebar menus
    const sidebarFn = () => {
        const $toggleMenu = document.getElementById('toggle-menu')
        const $mobileSidebarMenus = document.getElementById('sidebar-menus')
        const $menuMask = document.getElementById('menu-mask')
        const $body = document.body

        function openMobileSidebar() {
            btf.sidebarPaddingR()
            $body.style.overflow = 'hidden'
            btf.fadeIn($menuMask, 0.5)
            $mobileSidebarMenus.classList.add('open')
        }

        function closeMobileSidebar() {
            $body.style.overflow = ''
            $body.style.paddingRight = ''
            btf.fadeOut($menuMask, 0.5)
            $mobileSidebarMenus.classList.remove('open')
        }

        $toggleMenu.addEventListener('click', openMobileSidebar)

        $menuMask.addEventListener('click', e => {
            if ($mobileSidebarMenus.classList.contains('open')) {
                closeMobileSidebar()
            }
        })

        window.addEventListener('resize', e => {
            if (btf.isHidden($toggleMenu)) {
                if ($mobileSidebarMenus.classList.contains('open')) closeMobileSidebar()
            }
        })
    }

    /**
     * 首頁top_img底下的箭頭
     */
    const scrollDownInIndex = () => {
        const $scrollDownEle = document.getElementById('scroll-down')
        $scrollDownEle && $scrollDownEle.addEventListener('click', function () {
            btf.scrollToDest(document.getElementById('content-inner').offsetTop, 300)
        })
    }

    /**
     * 代碼
     * 只適用於Hexo默認的代碼渲染
     */
    // const addHighlightTool = function () {
    //     const highLight = GLOBAL_CONFIG.highlight
    //     if (!highLight) return
    //
    //     const isHighlightCopy = highLight.highlightCopy
    //     const isHighlightLang = highLight.highlightLang
    //     const isHighlightShrink = GLOBAL_CONFIG_SITE.isHighlightShrink
    //     const highlightHeightLimit = highLight.highlightHeightLimit
    //     const isShowTool = isHighlightCopy || isHighlightLang || isHighlightShrink !== undefined
    //     const $figureHighlight = highLight.plugin === 'highlighjs' ? document.querySelectorAll('figure.highlight') : document.querySelectorAll('pre[class*="language-"]')
    //
    //     if (!((isShowTool || highlightHeightLimit) && $figureHighlight.length)) return
    //
    //     const isPrismjs = highLight.plugin === 'prismjs'
    //
    //     let highlightShrinkEle = ''
    //     let highlightCopyEle = ''
    //     const highlightShrinkClass = isHighlightShrink === true ? 'closed' : ''
    //
    //     if (isHighlightShrink !== undefined) {
    //         highlightShrinkEle = `<i class="fas fa-angle-down expand ${highlightShrinkClass}"></i>`
    //     }
    //
    //     if (isHighlightCopy) {
    //         highlightCopyEle = '<div class="copy-notice"></div><i class="fas fa-copy copy-button"></i>'
    //     }
    //
    //     const copy = (text, ctx) => {
    //         if (document.queryCommandSupported && document.queryCommandSupported('copy')) {
    //             document.execCommand('copy')
    //             if (GLOBAL_CONFIG.Snackbar !== undefined) {
    //                 btf.snackbarShow(GLOBAL_CONFIG.copy.success)
    //             } else {
    //                 const prevEle = ctx.previousElementSibling
    //                 prevEle.innerText = GLOBAL_CONFIG.copy.success
    //                 prevEle.style.opacity = 1
    //                 setTimeout(() => {
    //                     prevEle.style.opacity = 0
    //                 }, 700)
    //             }
    //         } else {
    //             if (GLOBAL_CONFIG.Snackbar !== undefined) {
    //                 btf.snackbarShow(GLOBAL_CONFIG.copy.noSupport)
    //             } else {
    //                 ctx.previousElementSibling.innerText = GLOBAL_CONFIG.copy.noSupport
    //             }
    //         }
    //     }
    //
    //     // click events
    //     const highlightCopyFn = (ele) => {
    //         const $buttonParent = ele.parentNode
    //         $buttonParent.classList.add('copy-true')
    //         const selection = window.getSelection()
    //         const range = document.createRange()
    //         if (isPrismjs) range.selectNodeContents($buttonParent.querySelectorAll('pre code')[0])
    //         else range.selectNodeContents($buttonParent.querySelectorAll('table .code pre')[0])
    //         selection.removeAllRanges()
    //         selection.addRange(range)
    //         const text = selection.toString()
    //         copy(text, ele.lastChild)
    //         selection.removeAllRanges()
    //         $buttonParent.classList.remove('copy-true')
    //     }
    //
    //     const highlightShrinkFn = (ele) => {
    //         const $nextEle = [...ele.parentNode.children].slice(1)
    //         ele.firstChild.classList.toggle('closed')
    //         if (btf.isHidden($nextEle[$nextEle.length - 1])) {
    //             $nextEle.forEach(e => {
    //                 e.style.display = 'block'
    //             })
    //         } else {
    //             $nextEle.forEach(e => {
    //                 e.style.display = 'none'
    //             })
    //         }
    //     }
    //
    //     const highlightToolsFn = function (e) {
    //         const $target = e.target.classList
    //         if ($target.contains('expand')) highlightShrinkFn(this)
    //         else if ($target.contains('copy-button')) highlightCopyFn(this)
    //     }
    //
    //     const expandCode = function () {
    //         this.classList.toggle('expand-done')
    //     }
    //
    //     function createEle(lang, item, service) {
    //         const fragment = document.createDocumentFragment()
    //
    //         if (isShowTool) {
    //             const hlTools = document.createElement('div')
    //             hlTools.className = `highlight-tools ${highlightShrinkClass}`
    //             hlTools.innerHTML = highlightShrinkEle + lang + highlightCopyEle
    //             hlTools.addEventListener('click', highlightToolsFn)
    //             fragment.appendChild(hlTools)
    //         }
    //
    //         if (highlightHeightLimit && item.offsetHeight > highlightHeightLimit + 30) {
    //             const ele = document.createElement('div')
    //             ele.className = 'code-expand-btn'
    //             ele.innerHTML = '<i class="fas fa-angle-double-down"></i>'
    //             ele.addEventListener('click', expandCode)
    //             fragment.appendChild(ele)
    //         }
    //
    //         if (service === 'hl') {
    //             item.insertBefore(fragment, item.firstChild)
    //         } else {
    //             item.parentNode.insertBefore(fragment, item)
    //         }
    //     }
    //
    //     if (isHighlightLang) {
    //         if (isPrismjs) {
    //             $figureHighlight.forEach(function (item) {
    //                 const langName = item.getAttribute('data-language') ? item.getAttribute('data-language') : 'Code'
    //                 const highlightLangEle = `<div class="code-lang">${langName}</div>`
    //                 btf.wrap(item, 'figure', '', 'highlight')
    //                 createEle(highlightLangEle, item)
    //             })
    //         } else {
    //             $figureHighlight.forEach(function (item) {
    //                 let langName = item.getAttribute('class').split(' ')[1]
    //                 if (langName === 'plain' || langName === undefined) langName = 'Code'
    //                 const highlightLangEle = `<div class="code-lang">${langName}</div>`
    //                 createEle(highlightLangEle, item, 'hl')
    //             })
    //         }
    //     } else {
    //         if (isPrismjs) {
    //             $figureHighlight.forEach(function (item) {
    //                 btf.wrap(item, 'figure', '', 'highlight')
    //                 createEle('', item)
    //             })
    //         } else {
    //             $figureHighlight.forEach(function (item) {
    //                 createEle('', item, 'hl')
    //             })
    //         }
    //     }
    // }

    /**
     * PhotoFigcaption
     */
    // function addPhotoFigcaption() {
    //     document.querySelectorAll('#article-container img').forEach(function (item) {
    //         const parentEle = item.parentNode
    //         if (!parentEle.parentNode.classList.contains('justified-gallery')) {
    //             const ele = document.createElement('div')
    //             ele.className = 'img-alt is-center'
    //             ele.textContent = item.getAttribute('alt')
    //             parentEle.insertBefore(ele, item.nextSibling)
    //         }
    //     })
    // }

    /**
     * justified-gallery 圖庫排版
     * 需要 jQuery
     */

    // let detectJgJsLoad = false
    // const runJustifiedGallery = function (ele) {
    //     const $justifiedGallery = $(ele)
    //     const $imgList = $justifiedGallery.find('img')
    //     $imgList.unwrap()
    //     if ($imgList.length) {
    //         $imgList.each(function (i, o) {
    //             if ($(o).attr('data-lazy-src')) $(o).attr('src', $(o).attr('data-lazy-src'))
    //             $(o).wrap('<div></div>')
    //         })
    //     }
    //
    //     if (detectJgJsLoad) btf.initJustifiedGallery($justifiedGallery)
    //     else {
    //         $('head').append(`<link rel="stylesheet" type="text/css" href="${GLOBAL_CONFIG.source.justifiedGallery.css}">`)
    //         $.getScript(`${GLOBAL_CONFIG.source.justifiedGallery.js}`, function () {
    //             btf.initJustifiedGallery($justifiedGallery)
    //         })
    //         detectJgJsLoad = true
    //     }
    // }

    /**
     * fancybox和 mediumZoom
     */
    // const addFancybox = function (ele) {
    //     const runFancybox = (ele) => {
    //         ele.each(function (i, o) {
    //             const $this = $(o)
    //             const lazyloadSrc = $this.attr('data-lazy-src') || $this.attr('src')
    //             const lazyloadSrc1600 = lazyloadSrc + '_1600w'
    //             const dataCaption = $this.attr('alt') || ''
    //             if (lazyloadSrc.indexOf('!blogimg') != -1) {
    //                 $this.wrap(`<a href="${lazyloadSrc}" data-fancybox="images" data-caption="${dataCaption}" class="fancybox" data-srcset="${lazyloadSrc1600} 1600w"></a>`)
    //             } else {
    //                 $this.wrap(`<a href="${lazyloadSrc}" data-fancybox="images" data-caption="${dataCaption}" class="fancybox" data-srcset="${lazyloadSrc} 1600w"></a>`)
    //             }
    //
    //         })
    //
    //         $().fancybox({
    //             selector: '[data-fancybox]',
    //             loop: true,
    //             transitionEffect: 'slide',
    //             protect: true,
    //             buttons: ['slideShow', 'fullScreen', 'thumbs', 'close'],
    //             hash: false
    //         })
    //     }
    //
    //     if (typeof $.fancybox === 'undefined') {
    //         $('head').append(`<link rel="stylesheet" type="text/css" href="${GLOBAL_CONFIG.source.fancybox.css}">`)
    //         $.getScript(`${GLOBAL_CONFIG.source.fancybox.js}`, function () {
    //             runFancybox($(ele))
    //         })
    //     } else {
    //         runFancybox($(ele))
    //     }
    // }

    // const addMediumZoom = () => {
    //     const zoom = mediumZoom(document.querySelectorAll('#article-container :not(a)>img'))
    //     zoom.on('open', e => {
    //         const photoBg = document.documentElement.getAttribute('data-theme') === 'dark' ? '#121212' : '#fff'
    //         zoom.update({
    //             background: photoBg
    //         })
    //     })
    // }
    //
    // const jqLoadAndRun = () => {
    //     const $fancyboxEle = GLOBAL_CONFIG.lightbox === 'fancybox'
    //         ? document.querySelectorAll('#article-container :not(a):not(.gallery-group) > img, #article-container > img,.bber-content-img > img')
    //         : []
    //     const fbLengthNoZero = $fancyboxEle.length > 0
    //     const $jgEle = document.querySelectorAll('#article-container .justified-gallery')
    //     const jgLengthNoZero = $jgEle.length > 0
    //
    //     if (jgLengthNoZero || fbLengthNoZero) {
    //         btf.isJqueryLoad(() => {
    //             jgLengthNoZero && runJustifiedGallery($jgEle)
    //             fbLengthNoZero && addFancybox($fancyboxEle)
    //         })
    //     }
    // }

    /**
     * 滾動處理
     */
    const scrollFn = function () {
        const $rightside = document.getElementById('rightside')
        // 解决浏览器滚动时无休止报错
        if ($rightside === null) { return }
        const innerHeight = window.innerHeight + 56

        // 當滾動條小于 56 的時候
        if (document.body.scrollHeight <= innerHeight) {
            $rightside.style.cssText = 'opacity: 1; transform: translateX(-38px)'
            return
        }

        let initTop = 0
        let isChatShow = true
        const $header = document.getElementById('page-header')
        const $gulitop = document.getElementById('guli_top')
        const $cookies_window = document.getElementById('introduction-window')
        const isChatBtnHide = typeof chatBtnHide === 'function'
        const isChatBtnShow = typeof chatBtnShow === 'function'
        window.addEventListener('scroll', btf.throttle(function (e) {
            const currentTop = window.scrollY || document.documentElement.scrollTop
            const isDown = scrollDirection(currentTop)
            if (currentTop > 56) {
                if (isDown) {
                    if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible')
                    if (isChatBtnShow && isChatShow === true) {
                        chatBtnHide()
                        isChatShow = false
                    }
                } else {
                    if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible')
                    if (isChatBtnHide && isChatShow === false) {
                        chatBtnShow()
                        isChatShow = true
                    }
                }
                $header.classList.add('nav-fixed')
                $cookies_window.classList.add('cw-hide')
                if (window.getComputedStyle($rightside).getPropertyValue('opacity') === '0') {
                    $rightside.style.cssText = 'opacity: 1; transform: translateX(-38px)'
                }
            } else {
                if (currentTop === 0) {
                    $header.classList.remove('nav-fixed', 'nav-visible')
                }
                $rightside.style.cssText = "opacity: ''; transform: ''"
            }

            if (document.body.scrollHeight <= innerHeight) {
                $rightside.style.cssText = 'opacity: 1; transform: translateX(-38px)'
            }
        }, 200))

        // find the scroll direction
        function scrollDirection(currentTop) {
            const result = currentTop > initTop // true is down & false is up
            initTop = currentTop
            return result
        }
    }

    /**
     *  toc
     */
    const tocFn = function () {
        const $cardTocLayout = document.getElementById('card-toc')
        const $cardToc = $cardTocLayout.getElementsByClassName('toc-content')[0]
        const $tocLink = $cardToc.querySelectorAll('.toc-link')
        const $article = document.getElementById('article-container')

        // main of scroll
        window.tocScrollFn = function () {
            return btf.throttle(function () {
                const currentTop = window.scrollY || document.documentElement.scrollTop
                scrollPercent(currentTop)
                findHeadPosition(currentTop)
            }, 100)()
        }
        window.addEventListener('scroll', tocScrollFn)

        const scrollPercent = function (currentTop) {
            const docHeight = $article.clientHeight
            const winHeight = document.documentElement.clientHeight
            const headerHeight = $article.offsetTop
            const contentMath = (docHeight > winHeight) ? (docHeight - winHeight) : (document.documentElement.scrollHeight - winHeight)
            const scrollPercent = (currentTop - headerHeight) / (contentMath)
            const scrollPercentRounded = Math.round(scrollPercent * 100)
            const percentage = (scrollPercentRounded > 100) ? 100 : (scrollPercentRounded <= 0) ? 0 : scrollPercentRounded
            $cardToc.setAttribute('progress-percentage', percentage)
        }

        // anchor
        const isAnchor = GLOBAL_CONFIG.isanchor
        const updateAnchor = function (anchor) {
            if (window.history.replaceState && anchor !== window.location.hash) {
                if (!anchor) anchor = location.pathname
                const title = GLOBAL_CONFIG.postTitle
                window.history.replaceState({
                    url: location.href,
                    title: title
                }, title, anchor)
            }
        }

        const mobileToc = {
            open: () => {
                $cardTocLayout.style.cssText = 'animation: toc-open .3s; opacity: 1; right: 45px'
            },

            close: () => {
                $cardTocLayout.style.animation = 'toc-close .2s'
                setTimeout(() => {
                    $cardTocLayout.style.cssText = "opacity:''; animation: ''; right: ''"
                }, 100)
            }
        }

        document.getElementById('mobile-toc-button').addEventListener('click', () => {
            if (window.getComputedStyle($cardTocLayout).getPropertyValue('opacity') === '0') mobileToc.open()
            else mobileToc.close()
        })

        // toc元素點擊
        $cardToc.addEventListener('click', (e) => {
            e.preventDefault()
            const $target = e.target.classList.contains('toc-link')
                ? e.target
                : e.target.parentElement
            btf.scrollToDest(btf.getEleTop(document.getElementById(decodeURI($target.getAttribute('href')).replace('#', ''))), 300)
            if (window.innerWidth < 900) {
                mobileToc.close()
            }
        })

        const autoScrollToc = function (item) {
            const activePosition = item.getBoundingClientRect().top
            const sidebarScrollTop = $cardToc.scrollTop
            if (activePosition > (document.documentElement.clientHeight - 100)) {
                $cardToc.scrollTop = sidebarScrollTop + 150
            }
            if (activePosition < 100) {
                $cardToc.scrollTop = sidebarScrollTop - 150
            }
        }

        // find head position & add active class
        const list = $article.querySelectorAll('h1,h2,h3,h4,h5,h6')
        let detectItem = ''
        const findHeadPosition = function (top) {
            if ($tocLink.length === 0 || top === 0) {
                return false
            }

            let currentId = ''
            let currentIndex = ''

            list.forEach(function (ele, index) {
                if (top > btf.getEleTop(ele) - 80) {
                    currentId = '#' + encodeURI(ele.getAttribute('id'))
                    currentIndex = index
                }
            })

            if (detectItem === currentIndex) return

            if (isAnchor) updateAnchor(currentId)

            if (currentId === '') {
                $cardToc.querySelectorAll('.active').forEach(i => {
                    i.classList.remove('active')
                })
                detectItem = currentIndex
                return
            }

            detectItem = currentIndex

            $cardToc.querySelectorAll('.active').forEach(item => {
                item.classList.remove('active')
            })
            const currentActive = $tocLink[currentIndex]
            currentActive.classList.add('active')

            setTimeout(() => {
                autoScrollToc(currentActive)
            }, 0)

            let parent = currentActive.parentNode

            for (; !parent.matches('.toc'); parent = parent.parentNode) {
                if (parent.matches('li')) parent.classList.add('active')
            }
        }
    }

    /**
     * Rightside
     */
    // const rightSideFn = {
    //     switchReadMode: () => { // read-mode
    //         const $body = document.body
    //         $body.classList.add('read-mode')
    //         const newEle = document.createElement('button')
    //         newEle.type = 'button'
    //         newEle.className = 'fas fa-sign-out-alt exit-readmode'
    //         $body.appendChild(newEle)
    //
    //         function clickFn() {
    //             $body.classList.remove('read-mode')
    //             newEle.remove()
    //             newEle.removeEventListener('click', clickFn)
    //         }
    //
    //         newEle.addEventListener('click', clickFn)
    //     },
    //     switchDarkMode: () => { // Switch Between Light And Dark Mode
    //         const nowMode = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
    //         if (nowMode === 'light') {
    //             activateDarkMode()
    //             saveToLocal.set('theme', 'dark', 2);
    //             GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.day_to_night, false, 2000);
    //         } else {
    //             activateLightMode();
    //             saveToLocal.set('theme', 'light', 2);
    //             GLOBAL_CONFIG.Snackbar !== undefined && btf.snackbarShow(GLOBAL_CONFIG.Snackbar.night_to_day, false, 2000);
    //         }
    //         // handle some cases
    //         typeof utterancesTheme === 'function' && utterancesTheme()
    //         typeof FB === 'object' && window.loadFBComment()
    //         window.DISQUS && document.getElementById('disqus_thread').children.length && setTimeout(() => window.disqusReset(), 200)
    //     },
    //     showOrHideBtn: () => { // rightside 點擊設置 按鈕 展開
    //         document.getElementById('rightside-config-hide').classList.toggle('show')
    //     },
    //     scrollToTop: () => { // Back to top
    //         btf.scrollToDest(0, 500)
    //     },
    //     hideAsideBtn: () => { // Hide aside
    //         const $htmlDom = document.documentElement.classList
    //         $htmlDom.contains('hide-aside')
    //             ? saveToLocal.set('aside-status', 'show', 2)
    //             : saveToLocal.set('aside-status', 'hide', 2)
    //         $htmlDom.toggle('hide-aside')
    //     },
    //
    //     adjustFontSize: (plus) => {
    //         const fontSizeVal = parseInt(window.getComputedStyle(document.documentElement).getPropertyValue('--global-font-size'))
    //         let newValue = ''
    //         if (plus) {
    //             if (fontSizeVal >= 20) return
    //             newValue = fontSizeVal + 1
    //             document.documentElement.style.setProperty('--global-font-size', newValue + 'px')
    //             !document.getElementById('nav').classList.contains('hide-menu') && adjustMenu(true)
    //         } else {
    //             if (fontSizeVal <= 10) return
    //             newValue = fontSizeVal - 1
    //             document.documentElement.style.setProperty('--global-font-size', newValue + 'px')
    //             document.getElementById('nav').classList.contains('hide-menu') && adjustMenu(true)
    //         }
    //
    //         saveToLocal.set('global-font-size', newValue, 2)
    //         // document.getElementById('font-text').innerText = newValue
    //     }
    // }

    // document.getElementById('rightside').addEventListener('click', function (e) {
    //     const $target = e.target.id || e.target.parentNode.id
    //     switch ($target) {
    //         case 'go-up':
    //             rightSideFn.scrollToTop()
    //             break
    //         case 'rightside_config':
    //             rightSideFn.showOrHideBtn()
    //             break
    //         case 'readmode':
    //             rightSideFn.switchReadMode()
    //             break
    //         case 'darkmode':
    //             rightSideFn.switchDarkMode()
    //             break
    //         case 'hide-aside-btn':
    //             rightSideFn.hideAsideBtn()
    //             break
    //         case 'font-plus':
    //             rightSideFn.adjustFontSize(true)
    //             break
    //         case 'font-minus':
    //             rightSideFn.adjustFontSize()
    //             break
    //         default:
    //             break
    //     }
    // })

    /**
     * menu
     * 側邊欄sub-menu 展開/收縮
     * 解決menus在觸摸屏下，滑動屏幕menus_item_child不消失的問題（手機hover的bug)
     */
    const clickFnOfSubMenu = function () {
        document.querySelectorAll('#sidebar-menus .expand').forEach(function (e) {
            e.addEventListener('click', function () {
                this.classList.toggle('hide')
                const $dom = this.parentNode.nextElementSibling
                if (btf.isHidden($dom)) {
                    $dom.style.display = 'block'
                } else {
                    $dom.style.display = 'none'
                }
            })
        })

        window.addEventListener('touchmove', function (e) {
            const $menusChild = document.querySelectorAll('#nav .menus_item_child')
            $menusChild.forEach(item => {
                if (!btf.isHidden(item)) item.style.display = 'none'
            })
        })
    }

    /**
     * 複製時加上版權信息
     */
    const addCopyright = () => {
        const copyright = GLOBAL_CONFIG.copyright
        document.body.oncopy = (e) => {
            e.preventDefault()
            let textFont;
            const copyFont = window.getSelection(0).toString()
            if (copyFont.length > copyright.limitCount) {
                textFont = copyFont + '\n' + '\n' + '\n' +
                    copyright.languages.author + '\n' +
                    copyright.languages.link + window.location.href + '\n' +
                    copyright.languages.source + '\n' +
                    copyright.languages.info
            } else {
                textFont = copyFont
            }
            if (e.clipboardData) {
                return e.clipboardData.setData('text', textFont)
            } else {
                return window.clipboardData.setData('text', textFont)
            }
        }
    }

    /**
     * 網頁運行時間
     */
    const addRuntime = () => {
        const $runtimeCount = document.getElementById('runtimeshow');
        if ($runtimeCount) {
            var s1 = $runtimeCount.innerText;;//建站时间
            if(s1)
            {
                s1 = new Date(s1.replace(/-/g, "/"));
                s2 = new Date();
                var days = s2.getTime() - s1.getTime();
                var number_of_days = parseInt(days / (1000 * 60 * 60 * 24));
                $runtimeCount.innerText =number_of_days+"天";
            }
        }
    }

    /**
     * 最後一次更新時間
     */
    const addLastPushDate = () => {
        const $lastPushDateItem = document.getElementById('last-push-date')
        if ($lastPushDateItem) {
            const lastPushDate = $lastPushDateItem.getAttribute('data-lastPushDate')
            $lastPushDateItem.innerText = btf.diffDate(lastPushDate, true)
        }
    }

    /**
     * table overflow
     */
    const addTableWrap = function () {
        const $table = document.querySelectorAll('#article-container :not(.highlight) > table, #article-container > table')
        if ($table.length) {
            $table.forEach(item => {
                btf.wrap(item, 'div', '', 'table-wrap')
            })
        }
    }

    /**
     * tag-hide
     */
    const clickFnOfTagHide = function () {
        const $hideInline = document.querySelectorAll('#article-container .hide-button')
        if ($hideInline.length) {
            $hideInline.forEach(function (item) {
                item.addEventListener('click', function (e) {
                    const $this = this
                    const $hideContent = $this.nextElementSibling
                    $this.classList.toggle('open')
                    if ($this.classList.contains('open')) {
                        if ($hideContent.querySelectorAll('.justified-gallery').length > 0) {
                            btf.initJustifiedGallery($hideContent.querySelectorAll('.justified-gallery'))
                        }
                    }
                })
            })
        }
    }

    const tabsFn = {
        clickFnOfTabs: function () {
            document.querySelectorAll('#article-container .tab > button').forEach(function (item) {
                item.addEventListener('click', function (e) {
                    const $this = this
                    const $tabItem = $this.parentNode

                    if (!$tabItem.classList.contains('active')) {
                        const $tabContent = $tabItem.parentNode.nextElementSibling
                        const $siblings = btf.siblings($tabItem, '.active')[0]
                        $siblings && $siblings.classList.remove('active')
                        $tabItem.classList.add('active')
                        const tabId = $this.getAttribute('data-href').replace('#', '')
                        const childList = [...$tabContent.children]
                        childList.forEach(item => {
                            if (item.id === tabId) item.classList.add('active')
                            else item.classList.remove('active')
                        })
                        const $isTabJustifiedGallery = $tabContent.querySelectorAll(`#${tabId} .justified-gallery`)
                        if ($isTabJustifiedGallery.length > 0) {
                            btf.initJustifiedGallery($isTabJustifiedGallery)
                        }
                    }
                })
            })
        },
        backToTop: () => {
            document.querySelectorAll('#article-container .tabs .tab-to-top').forEach(function (item) {
                item.addEventListener('click', function () {
                    btf.scrollToDest(btf.getEleTop(btf.getParents(this, '.tabs')), 300)
                })
            })
        }
    }

    const toggleCardCategory = function () {
        const $cardCategory = document.querySelectorAll('#aside-cat-list .card-category-list-item.parent i')
        if ($cardCategory.length) {
            $cardCategory.forEach(function (item) {
                item.addEventListener('click', function (e) {
                    e.preventDefault()
                    const $this = this
                    $this.classList.toggle('expand')
                    const $parentEle = $this.parentNode.nextElementSibling
                    if (btf.isHidden($parentEle)) {
                        $parentEle.style.display = 'block'
                    } else {
                        $parentEle.style.display = 'none'
                    }
                })
            })
        }
    }

    // const switchComments = function () {
    //     let switchDone = false
    //     const $switchBtn = document.querySelector('#comment-switch > .switch-btn')
    //     $switchBtn && $switchBtn.addEventListener('click', function () {
    //         this.classList.toggle('move')
    //         document.querySelectorAll('#post-comment > .comment-wrap > div').forEach(function (item) {
    //             if (btf.isHidden(item)) {
    //                 item.style.cssText = 'display: block;animation: tabshow .5s'
    //             } else {
    //                 item.style.cssText = "display: none;animation: ''"
    //             }
    //         })
    //
    //         if (!switchDone && typeof loadOtherComment === 'function') {
    //             switchDone = true
    //             loadOtherComment()
    //         }
    //     })
    // }

    const addPostOutdateNotice = function () {
        const data = GLOBAL_CONFIG.noticeOutdate
        const diffDay = btf.diffDate(GLOBAL_CONFIG_SITE.postUpdate)
        if (diffDay >= data.limitDay) {
            const ele = document.createElement('div')
            ele.className = 'post-outdate-notice'
            ele.textContent = data.messagePrev + ' ' + diffDay + ' ' + data.messageNext
            const $targetEle = document.getElementById('article-container')
            if (data.position === 'top') {
                $targetEle.insertBefore(ele, $targetEle.firstChild)
            } else {
                $targetEle.appendChild(ele)
            }
        }
    }

    const lazyloadImg = () => {
        window.lazyLoadInstance = new LazyLoad({
            elements_selector: 'img',
            threshold: 0,
            data_src: 'lazy-src'
        })
    }

    const relativeDate = function (selector) {
        selector.forEach(item => {
            const $this = item
            const timeVal = $this.getAttribute('datetime')
            $this.innerText = btf.diffDate(timeVal, true)
            $this.style.display = 'inline'
        })
    }

    const unRefreshFn = function () {
        window.addEventListener('resize', adjustMenu)
        window.addEventListener('orientationchange', () => {
            setTimeout(adjustMenu(true), 100)
        })

        clickFnOfSubMenu()
        GLOBAL_CONFIG.islazyload && lazyloadImg()
        GLOBAL_CONFIG.copyright !== undefined && addCopyright()
    }

    window.refreshFn = function () {
        initAdjust();

        if (GLOBAL_CONFIG.isPost) {
            GLOBAL_CONFIG.isToc && tocFn()
            addRuntime();
            // GLOBAL_CONFIG.noticeOutdate !== undefined && addPostOutdateNotice()
            // GLOBAL_CONFIG.relativeDate.post && relativeDate(document.querySelectorAll('#post-meta time'))
        } else {
            // GLOBAL_CONFIG.relativeDate.homepage && relativeDate(document.querySelectorAll('#recent-posts time'))
            // GLOBAL_CONFIG.runtime && addRuntime()
            addLastPushDate()
            toggleCardCategory()
            addRuntime()
        }

        sidebarFn()
        GLOBAL_CONFIG.isHome && scrollDownInIndex()
        // addHighlightTool()
        // GLOBAL_CONFIG.isPhotoFigcaption && addPhotoFigcaption()
        // jqLoadAndRun()
        // GLOBAL_CONFIG.lightbox === 'mediumZoom' && addMediumZoom()
        scrollFn()
        addTableWrap()
        clickFnOfTagHide()
        tabsFn.clickFnOfTabs()
        tabsFn.backToTop()
        // switchComments()
    }

    refreshFn()
    unRefreshFn()
})
